%Recive un patron "pattern" vector de n elementos, y una matriz cuadrada, de dimension igual a la del patron
%retorna un vector de estados, de la misma dimension que el patron inicial

function ans = output(pattern, W)
	newOutput = pattern;			%vector de estados a retornar
	oldOutput = [];				%vector para comparar con el nuevo output
	patternSize = length(pattern);		%dimension del patron de entrada
	indexVector = [1:patternSize];		%vector de indices para obtener un indice random
	
	do
		oldOutput = newOutput;
		auxVector = indexVector;
		%Se cicla modificando un bit random del vector newOutput, hasta que se haya pasado por todos lso bits
		for j = 1: patternSize
			randomBit = round( (length(auxVector)-1) * rand(1,1))+ 1;
			index = auxVector(randomBit);
			auxVector(randomBit) = [];		
			product = getSign( W(index,:)*newOutput',newOutput(index)  );
			newOutput(index) = product;
		endfor
		
	until( areTheSame( oldOutput, newOutput ) )
	ans = newOutput;
	
endfunction